---
description: |-
  Describes how to set up a highly available OpenBao cluster with Integrated Storage (Raft)
---

# Highly available OpenBao cluster with integrated storage (Raft)

:::warning

**Important Note:** This chart is not compatible with Helm 2. Please use Helm 3.6+ with this chart.

:::

Integrated storage (raft) can be enabled using the `server.ha.raft.enabled` value:

```shell
helm install openbao hashicorp/openbao \
  --set='server.ha.enabled=true' \
  --set='server.ha.raft.enabled=true'
```

Next, initialize and unseal `openbao-0` pod:

```shell
kubectl exec -ti openbao-0 -- bao operator init
kubectl exec -ti openbao-0 -- bao operator unseal
```

Finally, join the remaining pods to the Raft cluster and unseal them. The pods
will need to communicate directly so we'll configure the pods to use the internal
service provided by the Helm chart:

```shell
kubectl exec -ti openbao-1 -- bao operator raft join http://openbao-0.openbao-internal:8200
kubectl exec -ti openbao-1 -- bao operator unseal

kubectl exec -ti openbao-2 -- bao operator raft join http://openbao-0.openbao-internal:8200
kubectl exec -ti openbao-2 -- bao operator unseal
```

To verify if the Raft cluster has successfully been initialized, run the following.

First, login using the `root` token on the `openbao-0` pod:

```shell
kubectl exec -ti openbao-0 -- bao login
```

Next, list all the raft peers:

```shell
$ kubectl exec -ti openbao-0 -- bao operator raft list-peers

Node                                    Address                        State       Voter
----                                    -------                        -----       -----
a1799962-8711-7f28-23f0-cea05c8a527d    openbao-0.openbao-internal:8201    leader      true
e6876c97-aaaa-a92e-b99a-0aafab105745    openbao-1.openbao-internal:8201    follower    true
4b5d7383-ff31-44df-e008-6a606828823b    openbao-2.openbao-internal:8201    follower    true
```

OpenBao with Integrated Storage (Raft) is now ready to use!
